<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/2 0002
 * Time: 10:52
 */

/**
 * 即时到账有密退款接口
 * @link  https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.60lg4z&treeId=62&articleId=104744&docType=1
 *
 */
class RefundFastpayByPlatformPwdBuilder extends AlipayTradeBuilder
{

    public function __construct()
    {
        $this->params['refund_date'] = date('Y-m-d H:i:s');
    }

    public function getServiceName()
    {
        return 'refund_fastpay_by_platform_pwd';
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @param $notify_url
     * @return $this
     */
    public function setNotifyUrl($notify_url)
    {
        $this->params['notify_url'] = $notify_url;
        return $this;
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @return mixed
     */
    public function getNotifyUrl()
    {
        return $this->params['notify_url'];
    }

    /**
     * seller_id是以2088开头的纯16位数字。
     * @param string $seller_id
     * @return $this
     */
    public function setSellerId($seller_id)
    {
        $this->params['seller_id'] = $seller_id;
        return $this;
    }

    /**
     * seller_email是支付宝登录账号，格式一般是邮箱或手机号。
     * @return mixed|null
     */
    public function getSellerEmail()
    {
        return isset($this->params['seller_email']) ? $this->params['seller_email'] : null;
    }

    /**
     * seller_email是支付宝登录账号，格式一般是邮箱或手机号。
     * @param string $seller_email
     * @return $this
     */
    public function setSellerEmail($seller_email)
    {
        $this->params['seller_email'] = $seller_email;
        return $this;
    }

    /**
     * 退款请求的当前时间。
     * 格式为：yyyy-MM-dd HH:mm:ss。
     * @param string $refund_date
     * @return $this
     */
    public function setRefundDate($refund_date)
    {
        $this->params['refund_date'] = $refund_date;
        return $this;
    }

    /**
     * 退款请求的当前时间。
     * 格式为：yyyy-MM-dd HH:mm:ss。
     * @return null|string
     */
    public function getRefundDate()
    {
        return isset($this->params['refund_date']) ? $this->params['refund_date'] : null;
    }

    /**
     * 退款批次号
     * 每进行一次即时到账批量退款，都需要提供一个批次号，通过该批次号可以查询这一批次的退款交易记录，对于每一个合作伙伴，传递的每一个批次号都必须保证唯一性。
     * 格式为：退款日期（8位）+流水号（3～24位）。
     * 不可重复，且退款日期必须是当天日期。流水号可以接受数字或英文字符，建议使用数字，但不可接受“000”。
     * @param string $batch_no
     * @return $this
     */
    public function setBatchNo($batch_no)
    {
        $this->params['batch_no'] = $batch_no;
        return $this;
    }

    /**
     * 退款批次号
     * 每进行一次即时到账批量退款，都需要提供一个批次号，通过该批次号可以查询这一批次的退款交易记录，对于每一个合作伙伴，传递的每一个批次号都必须保证唯一性。
     * 格式为：退款日期（8位）+流水号（3～24位）。
     * 不可重复，且退款日期必须是当天日期。流水号可以接受数字或英文字符，建议使用数字，但不可接受“000”。
     * @return null|string
     */
    public function getBatchNo()
    {
        return isset($this->params['batch_no']) ? $this->params['batch_no'] : null;
    }

    /**
     * 总笔数
     * 即参数detail_data的值中，“#”字符出现的数量加1，最大支持1000笔（即“#”字符出现的最大数量为999个）。
     * @param int $batch_num
     * @return $this
     */
    public function setBatchNum($batch_num)
    {
        $this->params['batch_num'] = $batch_num;
        return $this;
    }

    /**
     * 总笔数
     * 即参数detail_data的值中，“#”字符出现的数量加1，最大支持1000笔（即“#”字符出现的最大数量为999个）。
     * @return null|int
     */
    public function getBatchNum()
    {
        return isset($this->params['batch_num']) ? $this->params['batch_num'] : null;
    }

    /**
     * 退款请求的明细数据。
     * 单笔数据集格式为：第一笔交易退款数据集#第二笔交易退款数据集#第三笔交易退款数据集…#第N笔交易退款数据集；
     * 交易退款数据集的格式为：原付款支付宝交易号^退款总金额^退款理由；
     * 不支持退分润功能。
     * detail_data中的退款笔数总和要等于参数batch_num的值；
     * “退款理由”长度不能大于256字节，“退款理由”中不能有“^”、“|”、“$”、“#”等影响detail_data格式的特殊字符；
     * detail_data中退款总金额不能大于交易总金额；
     * 一笔交易可以多次退款，退款次数最多不能超过99次，需要遵守多次退款的总金额不超过该笔交易付款金额的原则。
     * @param string $detail_data
     * @return $this
     */
    public function setDetailData($detail_data)
    {
        $this->params['detail_data'] = $detail_data;
        return $this;
    }

    /**
     * 退款请求的明细数据
     * @return null|string
     */
    public function getDetailData()
    {
        return isset($this->params['detail_data']) ? $this->params['detail_data'] : null;
    }

}